package com.link.base.base.serviceprojectnew.service;

import com.link.base.base.user.model.User;
import com.link.base.base.serviceprojectnew.model.ProjectReport;
import com.link.base.base.serviceprojectnew.model.ServiceProject;
import com.link.core.basic.service.BasicService;

import java.util.List;

/**
 * @author unknown
 * @date unknown
 * @comments 项目信息
 */
public interface ServiceProjectService extends BasicService<ServiceProject> {
    /**
     * 查询项目员工列表
     *
     * @param user
     * @return 项目员工列表
     * @throws Exception
     */
    public List<User> queryProjSrproUserPage(User user) throws Exception;

    /**
     * 查询项目负责人列表
     *
     * @param sp
     * @return 项目员工列表
     * @throws Exception
     */
    public List<User> queryProjRespUserPage(ServiceProject sp) throws Exception;

    /**
     * 查询项目负责人列表
     *
     * @param message
     * @param userId
     * @throws Exception
     */
    public void pushMsgToRelatedUser(String message, Long userId) throws Exception;

    /**
     * 根据状态查询项目管理报表
     *
     * @param sp
     * @return List ProjectReport
     * @throws Exception
     */
    public List<ProjectReport> queryProjStatusReport(ServiceProject sp) throws Exception;

    /**
     * 查询项目列表
     *
     * @param t
     * @return List ProjectReport
     * @throws Exception
     */
    public List<ServiceProject> queryPublishTasksList(ServiceProject t) throws Exception;

    /**
     * 更新
     *
     * @param sp
     * @throws Exception
     */
    public void ServiceProjectPubStatusUpdate(ServiceProject sp) throws Exception;

    /**
     *  从任务反馈新建任务
     *
     *  @author      jiangtao
     *  @date        2019/3/7 上午9:39
     *  @param       t
     */
    public void insertMission(ServiceProject t) throws Exception;

    /**
     * 根据任务内容更新的各种情况，推送不同的企业微信消息
     *
     * @author xieyuqiang
     * @date 2019/3/22 15:53
     * @param beforeUpTask 更改前的任务记录
     * @param afterUpTask 更改后的任务记录
     */
    void sendWechatMsgRelyOnTaskUpdate(ServiceProject beforeUpTask, ServiceProject afterUpTask);

    /**
     * 给企业微信账号推送卡片连接消息
     *
     * @author xieyuqiang
     * @date 2019/3/21 15:45
     * @param user 企业微信成员user，对应linkcrm系统用户的user
     * @param taskId 任务记录ID
     * @param title 消息标题
     * @param content 消息内容
     */
    void sendMsgToEnterpriseWechatUser(User user, Long taskId, String title, String content);

    /**
     * 根据任务状态、我提出的、我负责的、全部等维度分组统计任务数量
     *
     * @author xieyuqiang
     * @date 2019/3/27 10:41
     * @param entity 任务对象实体，用于接收筛选参数等
     */
    List<ServiceProject> taskNumberCountByStatus(ServiceProject entity) throws Exception;

    /**
     * 以提出人和负责人为两个维度，
     * 简单汇总任务的全部、已延期和即将延期的待处理数量，
     * 并拼接成卡片文本消息发送给对应的企业微信成员
     *
     * @author xieyuqiang
     * @date 2019/3/27 17:48
     */
    void sendTaskReportForWorkWx() throws Exception;

    /**
     * 其他系统任务反馈创建
     *
     * @author 李莹
     * @date 2019/12/20 02:06
     * @param entity 任务对象实体，用于接收反馈数据
     * @return ServiceProject
     * @throws Exception 异常
     */
    public ServiceProject openInsertFeedback(ServiceProject entity) throws Exception;
}
